package com.kty.methods.sjqm.dao;

import lombok.Data;

import java.util.*;

@Data
public class SjqmOther {

    /**
     * 上元符头
     */
    public final String[] upFuTou = {"甲子", "甲午", "己卯", "己酉"};
    /**
     * 八符头
     */
    public final String[] baFuTou = {"甲戌", "甲申", "甲辰", "甲寅", "己巳", "己丑", "己亥", "己未"};
    /**
     * 十二符头
     */
    public final String[] fuTou = {"甲子", "甲戌", "甲申", "甲午", "甲辰", "甲寅", "己巳", "己卯", "己丑", "己亥", "己酉", "己未"};

    /**
     * 十天干
     */
    public final Map<String, Integer> TIAN_GAN = new HashMap<String, Integer>() {
        private static final long serialVersionUID = -1;

        {
            put("甲", 1);
            put("乙", 2);
            put("丙", 3);
            put("丁", 4);
            put("戊", 5);
            put("己", 6);
            put("庚", 7);
            put("辛", 8);
            put("壬", 9);
            put("癸", 10);
        }
    };
    /**
     * 十二地支
     */
    public final Map<String, Integer> DI_ZHI = new HashMap<String, Integer>() {
        private static final long serialVersionUID = -1;

        {
            put("子", 1);
            put("丑", 2);
            put("寅", 3);
            put("卯", 4);
            put("辰", 5);
            put("巳", 6);
            put("午", 7);
            put("未", 8);
            put("申", 9);
            put("酉", 10);
            put("戌", 11);
            put("亥", 12);
        }
    };
    /**
     * 十二地支
     */
    public final String[] diZhi = {"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"};
    /**
     * 六甲
     */
    public final Map<Integer, String> LIU_JIA = new HashMap<Integer, String>() {
        private static final long serialVersionUID = -1;

        {
            // 例如：（地支数-天干数）=0时为：甲子
            // ...
            put(0, "甲子");
            put(10, "甲戌");
            put(8, "甲申");
            put(6, "甲午");
            put(4, "甲辰");
            put(2, "甲寅");
        }
    };

    /**
     * 初始阳遁[{1宫:戊(甲子)}, {2宫:己(甲戌)}, {3宫:庚(甲申)}, {4宫:辛(甲午)}, {5宫:壬(甲辰)}, {6宫:癸(甲寅)}, {7宫:丁}, {8宫:丙}, {9宫:乙}]
     * <p>
     * ------------------------------------------------------------------------------------------------------------------
     * 阳遁一局[{1宫:戊(甲子)}, {2宫:己(甲戌)}, {3宫:庚(甲申)}, {4宫:辛(甲午)}, {5宫:壬(甲辰)}, {6宫:癸(甲寅)}, {7宫:丁}, {8宫:丙}, {9宫:乙}]
     * 阳遁二局[{1宫:乙}, {2宫:戊(甲子)}, {3宫:己(甲戌)}, {4宫:庚(甲申)}, {5宫:辛(甲午)}, {6宫:壬(甲辰)}, {7宫:癸(甲寅)}, {8宫:丁}, {9宫:丙}]
     * 阳遁三局[{1宫:丙}, {2宫:乙}, {3宫:戊(甲子)}, {4宫:己(甲戌)}, {5宫:庚(甲申)}, {6宫:辛(甲午)}, {7宫:壬(甲辰)}, {8宫:癸(甲寅)}, {9宫:丁}]
     * 阳遁四局[{1宫:丁}, {2宫:丙}, {3宫:乙}, {4宫:戊(甲子)}, {5宫:己(甲戌)}, {6宫:庚(甲申)}, {7宫:辛(甲午)}, {8宫:壬(甲辰)}, {9宫:癸(甲寅)}]
     * 阳遁五局[{1宫:癸(甲寅)}, {2宫:丁}, {3宫:丙}, {4宫:乙}, {5宫:戊(甲子)}, {6宫:己(甲戌)}, {7宫:庚(甲申)}, {8宫:辛(甲午)}, {9宫:壬(甲辰)}]
     * 阳遁六局[{1宫:壬(甲辰)}, {2宫:癸(甲寅)}, {3宫:丁}, {4宫:丙}, {5宫:乙}, {6宫:戊(甲子)}, {7宫:己(甲戌)}, {8宫:庚(甲申)}, {9宫:辛(甲午)}]
     * 阳遁七局[{1宫:辛(甲午)}, {2宫:壬(甲辰)}, {3宫:癸(甲寅)}, {4宫:丁}, {5宫:丙}, {6宫:乙}, {7宫:戊(甲子)}, {8宫:己(甲戌)}, {9宫:庚(甲申)}]
     * 阳遁八局[{1宫:庚(甲申)}, {2宫:辛(甲午)}, {3宫:壬(甲辰)}, {4宫:癸(甲寅)}, {5宫:丁}, {6宫:丙}, {7宫:乙},{ 8宫:戊(甲子)}, {9宫:己(甲戌)}]
     * 阳遁九局[{1宫:己(甲戌)}, {2宫:庚(甲申)}, {3宫:辛(甲午)}, {4宫:壬(甲辰)}, {5宫:癸(甲寅)}, {6宫:丁}, {7宫:丙}, {8宫:乙}, {9宫:戊(甲子)}]
     * <p>
     * ★注意：阳遁几局，'戊'就在几宫（阳遁顺排）
     */
    public final String[] YANG_DUN = {"戊", "己", "庚", "辛", "壬", "癸", "丁", "丙", "乙"};
    /**
     * 初始阳遁对应六甲隐位（1-9宫）
     */
    public final String[] YANG_DUN_WEI = {"甲子", "甲戌", "甲申", "甲午", "甲辰", "甲寅", "", "", ""};

    /**
     * 初始阴遁[{1宫:戊(甲子)}, {2宫:乙}, {3宫:丙}, {4宫:丁}, {5宫:癸(甲寅)}, {6宫:壬(甲辰)}, {7宫:辛(甲午)}, {8宫:庚(甲申)}, {9宫:己(甲戌)}]
     * <p>
     * ------------------------------------------------------------------------------------------------------------------
     * 阴遁一局 [{1宫:戊(甲子)}, {2宫:乙}, {3宫:丙}, {4宫:丁}, {5宫:癸(甲寅)}, {6宫:壬(甲辰)}, {7宫:辛(甲午)}, {8宫:庚(甲申)}, {9宫:己(甲戌)}]
     * 阴遁二局 [{1宫:己(甲戌)}, {2宫:戊(甲子)}, {3宫:乙}, {4宫:丙}, {5宫:丁}, {6宫:癸(甲寅)}, {7宫:壬(甲辰)}, {8宫:辛(甲午)}, {9宫:庚(甲申)}]
     * 阴遁三局 [{1宫:庚(甲申)}, {2宫:己(甲戌)}, {3宫:戊(甲子)}, {4宫:乙}, {5宫:丙}, {6宫:丁}, {7宫:癸(甲寅)}, {8宫:壬(甲辰)}, {9宫:辛(甲午)}]
     * 阴遁四局 [{1宫:辛(甲午)}, {2宫:庚(甲申)}, {3宫:己(甲戌)}, {4宫:戊(甲子)}, {5宫:乙}, {6宫:丙}, {7宫:丁}, {8宫:癸(甲寅)}, {9宫:壬(甲辰)}]
     * 阴遁五局 [{1宫:壬(甲辰)}, {2宫:辛(甲午)}, {3宫:庚(甲申)}, {4宫:己(甲戌)}, {5宫:戊(甲子)}, {6宫:乙}, {7宫:丙}, {8宫:丁}, {9宫:癸(甲寅)}]
     * 阴遁六局 [{1宫:癸(甲寅)}, {2宫:壬(甲辰)}, {3宫:辛(甲午)}, {4宫:庚(甲申)}, {5宫:己(甲戌)}, {6宫:戊(甲子)}, {7宫:乙}, {8宫:丙}, {9宫:丁}]
     * 阴遁七局 [{1宫:丁}, {2宫:癸(甲寅)}, {3宫:壬(甲辰)}, {4宫:辛(甲午)}, {5宫:庚(甲申)}, {6宫:己(甲戌)}, {7宫:戊(甲子)}, {8宫:乙}, {9宫:丙}]
     * 阴遁八局 [{1宫:丙}, {2宫:丁}, {3宫:癸(甲寅)}, {4宫:壬(甲辰)}, {5宫:辛(甲午)}, {6宫:庚(甲申)}, {7宫:己(甲戌)}, {8宫:戊(甲子)}, {9宫:乙}]
     * 阴遁九局 [{1宫:乙}, {2宫:丙}, {3宫:丁}, {4宫:癸(甲寅)}, {5宫:壬(甲辰)}, {6宫:辛(甲午)}, {7宫:庚(甲申)}, {8宫:己(甲戌)}, {9宫:戊(甲子)}]
     * <p>
     * ★注意：阴遁几局，'戊'就在几宫（阴遁顺排）
     */
    public final String[] YIN_DUN = {"戊", "乙", "丙", "丁", "癸", "壬", "辛", "庚", "己"};
    /**
     * 初始阴遁对应六甲隐位（1-9宫）
     */
    public final String[] YIN_DUN_WEI = {"甲子", "", "", "", "甲寅", "甲辰", "甲午", "甲申", "甲戌"};

    /**
     * 二十四节气
     */
    public final String[] solaTerms = {
            "冬至", "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", // 阳遁
            "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪" // 阴遁
    };
    /**
     * 二十四节气对应局数
     * <p>
     * 例如：冬至上元对应1局，冬至中元对应7局，冬至下元对应4局
     */
    public final Map<String, List<Integer>> SOLATERMS_SHU = new HashMap<String, List<Integer>>() {
        private static final long serialVersionUID = -1;

        {
            put("冬至", Arrays.asList(1, 7, 4));
            put("小寒", Arrays.asList(2, 5, 8));
            put("大寒", Arrays.asList(3, 9, 6));
            put("立春", Arrays.asList(8, 5, 2));
            put("雨水", Arrays.asList(9, 6, 3));
            put("惊蛰", Arrays.asList(1, 7, 4));
            put("春分", Arrays.asList(3, 9, 6));
            put("清明", Arrays.asList(4, 1, 7));
            put("谷雨", Arrays.asList(5, 2, 8));
            put("立夏", Arrays.asList(4, 1, 7));
            put("小满", Arrays.asList(5, 2, 8));
            put("芒种", Arrays.asList(6, 3, 9));
            put("夏至", Arrays.asList(9, 3, 6));
            put("小暑", Arrays.asList(8, 2, 5));
            put("大暑", Arrays.asList(7, 1, 4));
            put("立秋", Arrays.asList(2, 5, 8));
            put("处暑", Arrays.asList(1, 4, 7));
            put("白露", Arrays.asList(9, 3, 6));
            put("秋分", Arrays.asList(7, 1, 4));
            put("寒露", Arrays.asList(6, 9, 3));
            put("霜降", Arrays.asList(5, 8, 2));
            put("立冬", Arrays.asList(6, 9, 3));
            put("小雪", Arrays.asList(5, 8, 2));
            put("大雪", Arrays.asList(4, 7, 1));
        }
    };

    /**
     * 九宫顺时针宫数（用于：九星判断）
     */
    public final Map<Integer, List<Integer>> SHUN_GONG = new HashMap<Integer, List<Integer>>() {
        private static final long serialVersionUID = -1;

        {
            put(1, Arrays.asList(1, 8, 3, 4, 9, 2, 7, 6));
            put(2, Arrays.asList(2, 7, 6, 1, 8, 3, 4, 9));
            put(3, Arrays.asList(3, 4, 9, 2, 7, 6, 1, 8));
            put(4, Arrays.asList(4, 9, 2, 7, 6, 1, 8, 3));
//            put(5, Collections.emptyList()); // 五宫寄二宫
            put(6, Arrays.asList(6, 1, 8, 3, 4, 9, 2, 7));
            put(7, Arrays.asList(7, 6, 1, 8, 3, 4, 9, 2));
            put(8, Arrays.asList(8, 3, 4, 9, 2, 7, 6, 1));
            put(9, Arrays.asList(9, 2, 7, 6, 1, 8, 3, 4));
        }
    };
    /**
     * 九宫逆时针宫数用于：九星或八门判断）
     */
    public final Map<Integer, List<Integer>> NI_GONG = new HashMap<Integer, List<Integer>>() {
        private static final long serialVersionUID = -1;

        {
            put(1, Arrays.asList(1, 6, 7, 2, 9, 4, 3, 8));
            put(2, Arrays.asList(2, 9, 4, 3, 8, 1, 6, 8));
            put(3, Arrays.asList(3, 8, 1, 6, 7, 2, 9, 4));
            put(4, Arrays.asList(4, 3, 8, 1, 6, 7, 2, 9));
//            put(5, Collections.emptyList()); // 五宫寄二宫
            put(6, Arrays.asList(6, 7, 2, 9, 4, 3, 8, 1));
            put(7, Arrays.asList(7, 2, 9, 4, 3, 8, 1, 6));
            put(8, Arrays.asList(8, 1, 6, 7, 2, 9, 4, 3));
            put(9, Arrays.asList(9, 4, 3, 8, 1, 6, 7, 2));
        }
    };

    /**
     * 九星（顺时针旋转）
     */
    public final String[] jiuXing = {"天蓬星", "天任星", "天冲星", "天辅星", "天英星", "天芮星", "天柱星", "天心星"}; // 默认'天蓬星'在一宫【五宫'天禽星'除外】
    /**
     * 九星初始位置1
     */
    public final Map<Integer, String> JIU_XING = new HashMap<Integer, String>() {
        private static final long serialVersionUID = -1;

        {
            put(1, "天蓬星");
            put(2, "天芮星");
            put(3, "天冲星");
            put(4, "天辅星");
            put(5, "天禽星");
            put(6, "天心星");
            put(7, "天柱星");
            put(8, "天任星");
            put(9, "天英星");
        }
    };
    /**
     * 九星初始位置2
     */
    public final Map<String, Integer> JIU_XING2 = new HashMap<String, Integer>() {
        private static final long serialVersionUID = -1;

        {
            put("天蓬星", 1);
            put("天芮星", 2);
            put("天冲星", 3);
            put("天辅星", 4);
            put("天禽星", 5);
            put("天心星", 6);
            put("天柱星", 7);
            put("天任星", 8);
            put("天英星", 9);
        }
    };

    /**
     * 八门（顺时针旋转）
     */
    public final String[] baMen = {"休门", "生门", "伤门", "杜门", "景门", "死门", "惊门", "开门"}; // 默认'休门'在一宫【五宫除外】
    /**
     * 八门初始位置
     */
    public final Map<Integer, String> BA_MEN = new HashMap<Integer, String>() {
        private static final long serialVersionUID = -1;

        {
            put(1, "休门");
            put(2, "死门");
            put(3, "伤门");
            put(4, "杜门");
            put(5, ""); // 根据[值符]另作判断
            put(6, "开门");
            put(7, "惊门");
            put(8, "生门");
            put(9, "景门");
        }
    };
    /**
     * 八门对应二十四节气
     */
    public final Map<Integer, List<String>> BA_MEN_JIE_QI = new HashMap<Integer, List<String>>() {
        private static final long serialVersionUID = -1;

        {
            put(1, Arrays.asList("冬至", "小寒", "大寒")); // 休门
            put(2, Arrays.asList("立春", "雨水", "惊蛰")); // 生门
            put(3, Arrays.asList("春分", "清明", "谷雨")); // 伤门
            put(4, Arrays.asList("立夏", "小满", "芒种")); // 杜门
            put(5, Arrays.asList("夏至", "小暑", "大暑")); // 景门
            put(6, Arrays.asList("立秋", "处暑", "白露")); // 死门
            put(7, Arrays.asList("秋分", "寒露", "霜降")); // 惊门
            put(8, Arrays.asList("立冬", "小雪", "大雪")); // 开门
        }
    };

    /**
     * 八神旋转顺时针位置（1~9宫，除五宫之外）
     */
    public final Map<Integer, List<String>> BA_SHEN_SHUN = new HashMap<Integer, List<String>>() {
        private static final long serialVersionUID = -1;

        {
            put(1, Arrays.asList("值符", "玄武", "太阴", "六合", "", "九天", "九地", "螣蛇", "白虎")); // 一宫（值符旋转后落1宫）
            put(2, Arrays.asList("六合", "值符", "玄武", "九地", "", "太阴", "螣蛇", "白虎", "九天")); // 二宫
            put(3, Arrays.asList("九地", "六合", "值符", "螣蛇", "", "玄武", "白虎", "九天", "太阴")); // 三宫
            put(4, Arrays.asList("玄武", "太阴", "九天", "值符", "", "白虎", "六合", "九地", "螣蛇")); // 四宫
//            put(5, Collections.singletonList("")); // 五宫寄二宫，按二宫进行排序
            put(6, Arrays.asList("螣蛇", "九地", "六合", "白虎", "", "值符", "九天", "太阴", "玄武")); // 六宫
            put(7, Arrays.asList("太阴", "九天", "白虎", "玄武", "", "螣蛇", "值符", "六合", "九地")); // 七宫
            put(8, Arrays.asList("九天", "白虎", "螣蛇", "太阴", "", "九地", "玄武", "值符", "六合")); // 八宫
            put(9, Arrays.asList("白虎", "螣蛇", "九地", "九天", "", "六合", "太阴", "玄武", "值符")); // 九宫
        }
    };
    /**
     * 八神旋转逆时针位置（1~9宫，除五宫之外）
     */
    public final Map<Integer, List<String>> BA_SHEN_NI = new HashMap<Integer, List<String>>() {
        private static final long serialVersionUID = -1;

        {
            put(1, Arrays.asList("值符", "六合", "九地", "玄武", "", "螣蛇", "太阴", "九天", "白虎")); // 一宫（值符旋转后落1宫）
            put(2, Arrays.asList("玄武", "值符", "六合", "太阴", "", "九地", "九天", "白虎", "螣蛇")); // 二宫
            put(3, Arrays.asList("太阴", "玄武", "值符", "九天", "", "六合", "白虎", "螣蛇", "九地")); // 三宫
            put(4, Arrays.asList("六合", "九地", "螣蛇", "值符", "", "白虎", "玄武", "太阴", "九天")); // 四宫
//            put(5, Collections.singletonList("")); // 五宫寄二宫，按二宫进行排序
            put(6, Arrays.asList("", "", "", "", "", "值符", "", "", "")); // 六宫
            put(7, Arrays.asList("九地", "螣蛇", "白虎", "六合", "", "九天", "值符", "玄武", "太阴")); // 七宫
            put(8, Arrays.asList("螣蛇", "白虎", "九天", "九地", "", "太阴", "六合", "值符", "玄武")); // 八宫
            put(9, Arrays.asList("白虎", "九天", "太阴", "螣蛇", "", "玄武", "九地", "六合", "值符")); // 九宫
        }
    };

}
